home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fritz: All Fritz
/
All Fritz.zip
/
All Fritz
/
FILES
/
PROGSCAL
/
TBUTIL1.LZH
/
UT-MOD02.INC
< prev
next >
Wrap
Text File
|
1984-08-30
|
9KB
|
258 lines
procedure Beep(Tone,Duration : integer);
begin
Sound(Tone); Delay(Duration); NoSound;
end;
procedure Say_Cap_Num;
{ Display Caps, Num, Insert in inverse video on line 25 of Video }
var Value : integer;
begin
Value := Mem[0000:1047]; { test for caps, numbers, & cursor cntrl }
gotoXY(65,25);
Case Value of
0 : begin LowVideo; write(' '); Inserton:= false; end;
32 : begin LowVideo; write(' '); InvVideo('NUM');
Clreol; InsertOn:= false; end;
64 : begin InvVideo('CAPS'); Clreol;
InsertOn:= false; end;
96 : begin InvVideo('CAPS'); write(' '); InvVideo('NUM');
Clreol; InsertOn:=false; end;
128 : begin LowVideo; write(' ');
InvVideo('Insert');InsertOn:=true; end;
160 : begin LowVideo; write(' '); InvVideo('NUM');write(' ');
InvVideo('Insert'); InsertOn:=true; end;
192 : begin InvVideo('CAPS'); write(' ');
InvVideo('Insert'); InsertOn:=true; end;
224 : begin InvVideo('CAPS'); write(' ');InvVideo('NUM'); write(' ');
InvVideo('Insert'); InsertOn:= true; end;
end; { Case }
end;
procedure Set_Cap_Num(Caps,Num,Insert : Char);
{ Set the Cap Lock, Number Lock, and Ins Keys as desired }
var J : integer;
begin
if Insert='I' then J:=128 else J:=0;
Case Caps of
'C': begin if Num='N' then MemW[0000:1047]:= 96+J
else MemW[0000:1047]:= 64+J;
end;
' ': begin if Num='N' then MemW[0000:1047]:= 32+J
else MemW[0000:1047]:= 0+J;
end;
end; { Case }
end;
{.pa}
procedure Ck_edit_key(var Ch: Char);
{ test for an IBM Cursor control or Function key }
begin
read(kbd,Ch);
begin {see if IBM specific key pressed}
case Ch of
'H': Ch:=^E ; { up-arrow }
'P': Ch:=^X ; { dn-arrow }
'M': Ch:=^D ; { rt-arrow }
'K': Ch:=^S ; { left-arr }
'S': Ch:=#127 ; { Del }
'R': Ch:=^V ; { insert }
'G': Ch:=^G ; { Home }
'O': Ch:=^O ; { End }
'I': Ch:=^R ; { Pg-Up }
'Q': Ch:=#00 ; { Pg-Dn }
';': Ch:=^a ; { F1 }
'<': Ch:=^b ; { F2 }
'=': Ch:=^c ; { F3 }
'>': Ch:=^d ; { F4 }
'?': Ch:=^e ; { F5 }
'@': Ch:=^f ; { F6 }
'A': Ch:=^g ; { F7 }
'B': Ch:=^h ; { F8 }
'C': Ch:=^i ; { F9 }
'D': Ch:=^j ; { F10 }
end; {Case Ch}
end; {IBM check}
end; {Ck_edit_key}
procedure Get_Template(Template_num:integer; var template: str80);
{ Templates are specified by the Programmer }
begin
Case Template_num of
1 : template := '(___) ___-____';
2 : template := '__/__/__';
end;
end;
procedure Input(Typ: Char ; { Type of input }
Default: str255 ; { Default string }
Col,Row: integer ; { Where start line }
Mlen: integer ; { Max length }
UpperCase:Boolean ; { True if auto Upcase }
var F1,F10 : boolean); { Returned true if F1 or F10 }
{-- requires
Global procedures:
Say_Cap_Num, Set_Cap_Num, Color, Ck_edit_key, Beep, Get_template }
var
X,J,LastValue: integer;
OkChars,temp : set of Char;
DF : boolean;
{.pa}
{-------------------------- local procedures ---------------------------}
procedure GotoX;
begin
GotoXY(X+Col-1,Row);
end;
procedure Ck_Cap_Num; { test for caps, numbers, & cursor cntrl }
var Value : integer;
begin
repeat
Value := Mem[0000:1047];
if LastValue<>value then
begin LastValue:=Value; Say_Cap_Num; GotoX; end;
until keypressed;
end;
procedure PosX;
begin
while copy(template,X,1)<>#95 do
begin
Answer:=Answer + copy(template,X,1); X:=X+1; GotoX;
end;
end;
procedure Del_Ans;
begin
Answer:=''; X:=1; GotoX;
write(template); GotoX; PosX;
end;
{------------------------ end local procedures ------------------------}
begin
if Typ='A'then OKChars:=[' '..'}']
else OKChars:=['0'..'9','+','-','.'];
Temp := OKChars; color(7,0); DF:= false;
Case Typ of
'A','N','$': begin fillchar(template,80,#95);
template:=copy(template,1,Mlen);
if Typ='$' then
begin
X:=0; GotoX; HighVideo; write('$');
end;
end;
'F': begin
Get_template(Mlen,template); Mlen := length(template);
if copy(template,1,1)<>#95 then DF:= true;
end;
end;
if Typ = 'A' then if uppercase then Set_Cap_Num('C',' ','I')
else Set_Cap_Num(' ',' ','I')
else Set_Cap_Num(' ','N',' ');
Color(7,0);
Answer := ''; F1:=false; F10:=false;
if Default<>'' then
begin
X:=1; GotoX; write(template); GotoX; write(default);
Answer:=Default;
end
else Del_Ans;
LastValue:=Mem[0000:1047]; Say_Cap_Num; GotoX;
repeat
Ck_Cap_Num; read(kbd,Ch); Color(7,0);
if (keypressed) and (Ch<>'p') and (Ch<>'q') then Ck_edit_key(Ch);
if (Typ='F') and (X=1) and (Default<>'') and (Ch<>^1) and (Ch<>#13)
then Del_Ans;
case Ch of
^[: begin Del_Ans end; { ESC pressed }
^D: begin { Move cursor right : rt-arr }
X:=X+1;
if (X>length(Answer)+1) or (X>Mlen) then X:=X-1;
GotoX;
end;
^S: begin { Move cursor left : left-arr }
if Typ='F' then Del_Ans else
begin
X:=X-1; if X<1 then X:=1;
GotoX;
end;
end;
^O: begin { Move cursor to end of line }
X:=Length(Answer)+1; if X>Mlen then X:=Mlen; GotoX;
end;
^G: begin { Move cursor to beginning of line }
X:=1; GotoX;
end;
^H: begin { Delete left char: BS }
if Typ='F' then Del_Ans
else
begin
X:=X-1;
if (Length(Answer)>0) and (X>0) then
begin
Delete(Answer,X,1); GotoX;
Write(copy(Answer,X,(Length(Answer)-X+1)),#95);
GotoX;
end
else X:=1;
end; { Typ <> 'F' }
end;
#127: begin { Delete }
Delete(Answer,X,1);
Write(copy(Answer,X,Length(Answer)-X+1),#95); GotoX;
end;
^a : begin { F1 pressed }
F1 := true; Exit := true; Answer:= default;
end;
^M : Exit := true;
^j : begin F10 := true; Exit := true; Answer := default; end;
else
if (length(Answer)+1 <= Mlen) or (not InsertOn) then
begin { non-IBM char }
if Ch in OkChars then
begin
if InsertOn then
begin
if length(Answer) < Mlen then
begin { OK to insert }
insert(Ch,Answer,X);
Case Typ of
'A','N','$' : write(copy(Answer,X,Length(Answer)-X+1));
'F' : Write(Ch);
end; {Case}
end; { OK to insert }
end else { end InsertOn }
if X <= Mlen then
begin
write(Ch);
if X>length(Answer) then Answer:=Answer+Ch
else Answer[X]:=Ch;
end; { processing this key }
if X+1 <= Mlen then X:=X+1;
if (X > Length(Answer)) and (template[X]<>#95) then PosX;
end { OkChars }
else if (Ch<> ^V) then Beep(300,150);
{ beep if invalid char and ch is not Insert key }
GotoX;
end; { non IBM key }
if (typ<>'F') and (length(Answer)+1 > Mlen) and (Ch <> ^V)
then Beep(600,100);
end; { CASE!!! }
until Exit = true;
Color(0,15); X:=1; gotoX; write(Answer);
{ erase part of template that is left }
X:=length(Answer)+1; GotoX;
for J:= 1 to Mlen-x+1 do write(' ');
Exit := false; Color(0,7);
if (DF) and (length(Answer)=1) then
begin
gotoXY(col,row); write(' '); Answer:='';
end;
end; { end Input Procedure }